/** 
 * 时间戳----> 日期字符串
*/
// 定义一个函数，接收时间戳作为参数
function getDateTimeString(timestamp:number|string):string {
    const date = new Date(timestamp);
    const year = date.getFullYear(); 
    const month = (date.getMonth() + 1).toString().padStart(2, '0');   // 获取两位数的月份（注意要加上1）
    const day = date.getDate().toString().padStart(2, '0');   // 获取两位数的日期
    // 返回格式化后的年月日字符串
    return `${year}-${month}-${day}`;
  }
// 年月日时分秒
function getTimeString(timestamp:number | string):string {
  const date = new Date(timestamp);
  const year = date.getFullYear(); 
  const month = (date.getMonth() + 1).toString().padStart(2, '0');   // 获取两位数的月份（注意要加上1）
  const day = date.getDate().toString().padStart(2, '0');   // 获取两位数的日期
  const hours = String(date.getHours()).padStart(2, '0'); // 获取两位数的小时
  const minutes = String(date.getMinutes()).padStart(2, '0'); // 获取两位数的分钟
  const seconds = String(date.getSeconds()).padStart(2, '0'); // 获取两位数的秒钟
  // 返回格式化后的年月日字符串
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
  //获取时间字符串 包括年月日 时分秒 星期
  function getServerTimeString(serverTime) {
    const now = new Date(serverTime);

    // 获取年份、月份（从0开始计数）、日期
  //  let y = now.getFullYear();
    let m = (now.getMonth() + 1).toString().padStart(2, '0'); // 月份需要加1
    let d = now.getDate().toString().padStart(2, '0');

    // 获取星期
    const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
    let w = weekDays[now.getDay()];

    // 获取小时、分钟和秒，并确保它们都是两位数
    let h = now.getHours().toString().padStart(2, '0');
    let min = now.getMinutes().toString().padStart(2, '0');
 //   let s = now.getSeconds().toString().padStart(2, '0');

    // 构建格式化的日期时间字符串
    //let dateTimeString = `${y}-${m}-${d} ${w} ${h}:${min}:${s}`;
    let dateTimeString = `${m}月${d}日 ${w} ${h}:${min}`;
    return dateTimeString
}

//分页
function paginateData(data, pageSize) {
  const pages = <any>[];
  for (let i = 0; i < data.length; i += pageSize) {
      pages.push(data.slice(i, i + pageSize));
  }
  return pages;
}

const throttle = function(func, wait) {//节流  规定在一个单位时间内只能触发一次函数，如果在单位时间内触发多次,只执行一次。比如两秒内的点击事件，无论点多少次，两秒内只执行一次。
  let timeout;
  return function() {
    //@ts-ignore
    let context = this;
    let args = arguments;
    if (!timeout) {
      timeout = setTimeout(() => {
        timeout = null;
        func.apply(context, args)
      }, wait)
    }
  }
}
const debounce = function (func, wait) { //防抖 当事件被触发 n 秒后再执行回调，如果在 n 秒内又被触发，则重新计时。
  let timer;
  return function() {
     
      let args = arguments; 
      if (timer) clearTimeout(timer);
      timer = setTimeout(() => {
        //@ts-ignore
          func.apply(this, args)
      }, wait) 
  }
}
  export {
    getDateTimeString,
    getServerTimeString,
    paginateData,
    getTimeString,
    throttle,
    debounce
  }